<?php
App::uses('AppModel', 'Model');
/**
 * Trabalho Model
 *
 * @property Usuario $Usuario
 * @property Revisor $Revisor
 * @property Categoria $Categoria
 * @property Sessao $Sessao
 */
class Trabalho extends AppModel {

/**
 * Display field
 *
 * @var string
 */
	public $displayField = 'titulo';

/**
 * Validation rules
 *
 * @var array
 */
	public $validate = array(
		'usuario_id' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'categoria_id' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message' => 'Você deve escolher uma categoria',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
			'unique'=>array(
				'rule'=>array('checkUnique', array('categoria_id', 'usuario_id')),
				'message'=>'Você já enviou um trabalho dessa categoria!'
			)
		),
		'sessao_id' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'titulo' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'caminho' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'nota' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				//'message' => 'Your custom message here',
				'allowEmpty' => true,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'autores' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'resumo' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'apresentador' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
	);

	//The Associations below have been created with all possible keys, those that are not needed can be removed

/**
 * belongsTo associations
 *
 * @var array
 */
	public $belongsTo = array(
		'Revisor'=>array(
			'className'=>'Usuario',
			'foreignKey'=>'revisor_id'
		),
		'Usuario' => array(
			'className' => 'Usuario',
			'foreignKey' => 'usuario_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Categoria' => array(
			'className' => 'Categoria',
			'foreignKey' => 'categoria_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Sessao' => array(
			'className' => 'Sessao',
			'foreignKey' => 'sessao_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		)
	);
	
	public $hasOne = array(
		'Avaliacao'=>array(
			'className'=>'Avaliacao',
			'foreignKey'=>'trabalho_id'
		)	
	);
	
	public $hasMany = array(
		'Keywords'=>array(
			'className'=>'Keyword',
			'foreignKey'=>'trabalho_id'
		)
	);
	
	
	public function listaDeTrabalhosParaRevisor($revisor_id){
		$this->recursive = 1;
//		pr( $this->find('all', array('conditions'=>array('revisor_id'=>$revisor_id, 'nota'=>NULL))));
		return $this->find('all', array('conditions'=>array(
				'revisor_id'=>$revisor_id,
				'OR'=>array(
						array('Avaliacao.nota'=>null),
						array('Avaliacao.nota'=>0, 'hora_pedido_reavaliacao !='=>'0000-00-00 00:00:00', 'Avaliacao.nota_reavaliacao'=>null)
				)
			)));		
	}
	
	public function listaDeTrabalhosParaReavaliarRevisor($revisor_id){
		$this->recursive = 1;
		//		pr( $this->find('all', array('conditions'=>array('revisor_id'=>$revisor_id, 'nota'=>NULL))));
		return $this->find('all', array('conditions'=>array('revisor_id'=>$revisor_id, 'Avaliacao.hora_pedido_reavaliacao !='=>'0000-00-00 00:00:00')));
	}
	
	public function podeCorrigir($user_id, $trabalho_id){
		$this->unbindModel(array('belongsTo'=>array('Revisor', 'Usuario', 'Categoria', 'Sessao')));
		$dados = $this->find('first', array('conditions'=>array('revisor_id'=>$user_id, 'Trabalho.id'=>$trabalho_id), 'recursive'=>0));
		if(empty($dados)) return false;
		else return $dados;
	}
	
	public function trabalhosPorCategoria(){
		$categorias = $this->Categoria->find('list');
		$trabalhos = array();
// 		$this->unbindModel(array('belongsTo'=>array('Usuario', 'Revisor'), 'hasMany'=>array('Keywords')));
		foreach($categorias as $key=>$categoria){
			$trabalhos[$key]['lista'] = $this->find('all', array('conditions'=>array('OR'=>array(array('Avaliacao.nota'=>$key), array('Avaliacao.nota_reavaliacao'=>$key))), 'order'=>'Sessao.nome ASC, Trabalho.titulo'));
			$trabalhos[$key]['total'] = $this->find('count', array('conditions'=>array( 'OR'=>array(array('Avaliacao.nota'=>$key), array('Avaliacao.nota_reavaliacao'=>$key))), 'order'=>'Trabalho.titulo'));
		}
		return $trabalhos;		
	}
	
	public function definirRevisor($trabalho_id, $revisor_id){
		$this->unbindModel(array('belongsTo'=>array('Usuario', 'Revisor', 'Sessao', 'Categoria')));
		$trabalho = $this->findById($trabalho_id);
		$trabalho['Trabalho']['revisor_id'] = $revisor_id;
		// Já tem Avaliação Salvo
		if(!empty($trabalho['Avaliacao']['id'])){
			if($trabalho['Avaliacao']['pedido_reavaliacao'] == null){
				$trabalho['Avaliacao']['nota'] = NULL;
				$trabalho['Avaliacao']['justificativa'] = NULL;
			}
		}
		// Vai criar Avaliação
		else{
			$trabalho['Avaliacao']['avaliado_em'] = '0000-00-00 00:00:00';
			$trabalho['Avaliacao']['reavaliado_em'] = '0000-00-00 00:00:00';
			$trabalho['Avaliacao']['hora_pedido_reavaliacao'] = '0000-00-00 00:00:00';
		}
		return $this->saveAll($trabalho);
	}
}
